//
//  WBUserAccount.swift
//  微博
//
//  Created by dong on 2018/2/22.
//  Copyright © 2018年 dong. All rights reserved.
//

import UIKit

private let accountFile: NSString = "useraccount.json"
/// 用户账户信息
class WBUserAccount: NSObject {

    /// 访问令牌（要保存）
    var access_token: String?
    ///用户代号（要保存）
    var uid: String?
    ///过期日期，单位秒
    ///开发者 5 年，每次登陆之后都是 5 年
    ///使用者 3 天，会从第一次递减
    var expires_in: TimeInterval = 0 {
        //秒数转换为日期
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    //过期日期（要保存）
    var expiresDate: Date?
    
    /// 用户昵称
    var screen_name: String?
    /// 用户头像地址（大图），180*180像素
    var avatar_large: String?
    
    override var description: String{
        
        return yy_modelDescription()
    }
    
    override init(){
        
        super.init()
        
        //从磁盘中加载保存的文件 -》 字典
        //1》 加载磁盘文件到二进制数据，如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
              let data = NSData(contentsOfFile: path),
        let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: AnyObject]
            else{
                
                return
        }
        //使用字典设置属性值
        // *** 用户是否登陆的关键代码
        yy_modelSet(with: dict ?? [:])
        
        print("从沙盒加载用户信息\(self)")
        
        // 3. 判断 token 是否过期
        // 测试过期日期 ---- 开发中每一个分支都要测试 
        //expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
//        print(expiresDate)
        
        if expiresDate?.compare(Date()) != .orderedDescending{
            print("账户过期")
            
            //清空 token
            access_token = nil
            uid = nil
            
            //删除账户文件
            _ = try? FileManager.default.removeItem(atPath: path)
        }
        print("账户正常\(self)")
    }
    /*
     1.偏好设置（小）- Xcode 8.0 beta 无效！
     2.沙盒- 归档／plist／‘json’
     3.数据库（FMDB／CoreData）
     4.钥匙串访问（小／自动加密 - 需要使用框架 SSKeyChain）
    */
    func saveAccount(){
        
        // 1. 模型转字典
        var dict = self.yy_modelToJSONObject() as? [String: AnyObject] ?? [:]
        // 删除 expires_in 值
        dict.removeValue(forKey: "expires_in")
        // 2. 字典序列化 data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
            let filePath = accountFile.cz_appendDocumentDir()
        else{
            return
        }
        // 3. 写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("用户账户保存成功\(filePath)")
    }
}
